
/**
 * 线程示例程序.
 * 注意运行JsoupThread需要在工程中添加Jsoup的jar包
 * @author wts
 */
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import java.io.IOException;

/**
 * 1、最原始的方式，继承Thread类，重写run方法。
 */
class MyThread1 extends Thread {
    public MyThread1() {
    }

    public MyThread1(String name) {
        super(name);
    }

    @Override
    public void run() {
        for (int i = 0; i < 5; i++) {
            System.out.println(Thread.currentThread().getName() + ":" + i);
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}

/**
 * 2、实现Runnable接口，重写run方法。
 */
class MyThread2 implements Runnable {
    @Override
    public void run() {
        for (int i = 0; i < 5; i++) {
            System.out.println(Thread.currentThread().getName() + ":" + i);
            try {
                Thread.sleep(100);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}

/**
 * 示例：实现Runnable接口，重写run方法，使用线程的方式做网络爬虫。
 */
class JsoupThread implements Runnable{
    public JsoupThread() {
    }

    @Override
    public void run() {
        Document doc = null;
        try {
            doc = Jsoup.connect("https://www.baidu.com/").get();
        } catch (IOException e) {
            e.printStackTrace();
        }
        //获取html中的title
        System.err.println("JsoupThread:"+doc.title());
        //获取html中的head
        System.out.println(doc.head());
        //获取html中的body
        //System.out.println(document.body());

        //获取HTML页面中的所有链接
        Elements links = doc.select("a[href]");
        for (Element link : links){
            System.out.println("link : "+ link.attr("href"));
            System.out.println("text :"+ link.text());
        }

    }
}
public class MyThreadTest {

    public static void main(String[] args) {
        System.out.println("------线程测试1：继承Thread类，重写run方法，使用无参构造方法------");
        new MyThread1().start();

        System.out.println("------线程测试2：继承Thread类，重写run方法，使用有参构造方法，指定线程的名字------");
        new MyThread1("继承Thread类的线程实现").start();

        System.out.println("------线程测试3：实现Runnable接口，重写run方法，指定线程的名字------");
        new Thread(new MyThread2(),"实现Runnable接口的线程实现").start();

        System.out.println("------线程示例：实现Runnable接口，重写run方法，使用线程的方式做网络爬虫。------");
        new Thread(new JsoupThread(),"实现Ruuable接口的线程实现(Jsoup)").start();
    }
}

